<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="kySPx" id="kySPx"><span data-lake-id="u97b5e4a7" id="u97b5e4a7">典型回答</span></h1>
  <p data-lake-id="u92f5fc74" id="u92f5fc74"><br></p>
  <p data-lake-id="uae1b6df5" id="uae1b6df5"><span data-lake-id="u2561451d" id="u2561451d">预热一般指</span><strong><span data-lake-id="u847d768a" id="u847d768a">缓存预热</span></strong><span data-lake-id="uc3e78d45" id="uc3e78d45">，一般用在高并发系统中，为了提升系统在高并发情况下的稳定性的一种手段。</span></p>
  <p data-lake-id="u2ce6c049" id="u2ce6c049"><span data-lake-id="uc044d3a0" id="uc044d3a0">​</span><br></p>
  <p data-lake-id="u90e2879b" id="u90e2879b"><span data-lake-id="u1afb3652" id="u1afb3652">缓存预热是指在系统启动之前或系统达到高峰期之前，通过预先将常用数据加载到缓存中，</span><strong><span data-lake-id="u11c9eadb" id="u11c9eadb">以提高缓存命中率和系统性能的过程</span></strong><span data-lake-id="u746d16eb" id="u746d16eb">。缓存预热的目的是</span><strong><span data-lake-id="u2ec81674" id="u2ec81674">尽可能地避免缓存击穿和缓存雪崩</span></strong><span data-lake-id="uf1ab764b" id="uf1ab764b">，还可以减轻后端存储系统的负载，提高系统的响应速度和吞吐量。</span></p>
  <p data-lake-id="u988cc147" id="u988cc147"><span data-lake-id="ud56253a7" id="ud56253a7">​</span><br></p>
  <ol list="ua3775836">
   <li fid="u0520b72e" data-lake-id="u661f0043" id="u661f0043" data-lake-index-type="true"><strong><span data-lake-id="ua1d34cb1" id="ua1d34cb1">减少冷启动影响</span></strong><span data-lake-id="ud17a33e7" id="ud17a33e7">：当系统重启或新启动时，缓存是空的，这被称为冷启动。冷启动可能导致首次请求处理缓慢，因为数据需要从慢速存储（如数据库）检索。</span></li>
   <li fid="u0520b72e" data-lake-id="u09b2cb12" id="u09b2cb12" data-lake-index-type="true"><strong><span data-lake-id="u186c5f92" id="u186c5f92">提高数据访问速度</span></strong><span data-lake-id="ub2c9dbc2" id="ub2c9dbc2">：通过预先加载常用数据到缓存中，可以确保数据快速可用，从而加快数据访问速度。</span></li>
   <li fid="u0520b72e" data-lake-id="u3c80403a" id="u3c80403a" data-lake-index-type="true"><strong><span data-lake-id="ua8042f5a" id="ua8042f5a">平滑流量峰值</span></strong><span data-lake-id="u2870cadd" id="u2870cadd">：在流量高峰期之前预热缓存可以帮助系统更好地处理高流量，避免在流量激增时出现性能下降。</span></li>
   <li fid="u0520b72e" data-lake-id="ueed47b7b" id="ueed47b7b" data-lake-index-type="true"><strong><span data-lake-id="u1718e9d1" id="u1718e9d1">保证数据的时效性</span></strong><span data-lake-id="u7f017577" id="u7f017577">：定期预热可以保证缓存中的数据是最新的，特别是对于高度依赖于实时数据的系统。</span></li>
   <li fid="u0520b72e" data-lake-id="u3cd55760" id="u3cd55760" data-lake-index-type="true"><strong><span data-lake-id="u458398b1" id="u458398b1">减少对后端系统的压力</span></strong><span data-lake-id="u9a92d5bd" id="u9a92d5bd">：通过缓存预热，可以减少对数据库或其他后端服务的直接查询，从而减轻它们的负载。</span></li>
  </ol>
  <p data-lake-id="u9dffa691" id="u9dffa691"><span data-lake-id="u25a4dac9" id="u25a4dac9">​</span><br></p>
  <p data-lake-id="u718a4567" id="u718a4567"><span data-lake-id="u1e73d3ca" id="u1e73d3ca">比如秒杀商品、大促活动等，这些是可以提前预知哪些key会变成热key的，所以就可以做提前的预热。</span></p>
  <p data-lake-id="u028413c9" id="u028413c9"><span data-lake-id="u629b3d7f" id="u629b3d7f">​</span><br></p>
  <p data-lake-id="ufb099a96" id="ufb099a96"><span data-lake-id="u1da76cd0" id="u1da76cd0">缓存预热的一般做法是在系统启动或系统空闲期间，将常用的数据加载到缓存中，主要做法有以下几种：</span></p>
  <p data-lake-id="uc42706d6" id="uc42706d6"><span data-lake-id="u06e35a3d" id="u06e35a3d">​</span><br></p>
  <ol list="u905b26b5">
   <li fid="ua1133e13" data-lake-id="u89de63d2" id="u89de63d2"><span data-lake-id="u112153ea" id="u112153ea">系统启动时加载：在系统启动时，将常用的数据加载到缓存中，以便后续的访问可以直接从缓存中获取。</span></li>
  </ol>
  <p data-lake-id="ubebc98b8" id="ubebc98b8"><br></p>
  <ol list="u905b26b5" start="2">
   <li fid="ua1133e13" data-lake-id="u80052239" id="u80052239"><span data-lake-id="u5f917edc" id="u5f917edc">定时任务加载：定时执行任务，将常用的数据加载到缓存中，以保持缓存中数据的实时性和准确性。</span></li>
  </ol>
  <p data-lake-id="u724030b0" id="u724030b0"><br></p>
  <ol list="u905b26b5" start="3">
   <li fid="ua1133e13" data-lake-id="u987a1437" id="u987a1437"><span data-lake-id="ucfcce02e" id="ucfcce02e">手动触发加载：在系统达到高峰期之前，手动触发加载常用数据到缓存中，以提高缓存命中率和系统性能。</span></li>
  </ol>
  <p data-lake-id="u89f606fb" id="u89f606fb"><br></p>
  <p data-lake-id="ue8ac8fed" id="ue8ac8fed"><span data-lake-id="u1dba8ad3" id="u1dba8ad3">缓存预热是一种提高高并发系统性能和可靠性的重要方法，通过预先将常用的数据加载到缓存中，避免缓存击穿和缓存雪崩等问题，从而保证系统的稳定性和可靠性。</span></p>
  <p data-lake-id="ud84b3a15" id="ud84b3a15"><span data-lake-id="ucd6f5743" id="ucd6f5743">​</span><br></p>
  <p data-lake-id="u1d568485" id="u1d568485"><span data-lake-id="u9fe97521" id="u9fe97521">​</span><br></p>
  <h1 data-lake-id="Jx45v" id="Jx45v"><span data-lake-id="u71d91bce" id="u71d91bce">扩展知识</span></h1>
  <h2 data-lake-id="e12Le" id="e12Le"><span data-lake-id="u1508362e" id="u1508362e">缓存预热的方法</span></h2>
  <p data-lake-id="u752fa658" id="u752fa658"><br></p>
  <p data-lake-id="u230ec0a4" id="u230ec0a4"><span data-lake-id="uc88eba39" id="uc88eba39">在进行缓存预热时，有一些工具可供使用。常见的是以下这几个：</span></p>
  <p data-lake-id="u7ccbcb57" id="u7ccbcb57"><br></p>
  <p data-lake-id="u79766ec6" id="u79766ec6"><br></p>
  <p data-lake-id="u8a9044c7" id="u8a9044c7"><span data-lake-id="uc1ea605b" id="uc1ea605b">如果要自己实现本地缓存的预热，可以看上面的文章，如果要给redis预热，可以看下面的：</span></p>
  <p data-lake-id="u8f747ebb" id="u8f747ebb"><span data-lake-id="ud0a3fe4d" id="ud0a3fe4d">​</span><br></p>
  <p data-lake-id="u530c15f3" id="u530c15f3"><span data-lake-id="u8e437506" id="u8e437506">RedisBloom：RedisBloom是Redis的一个模块，提供了多个数据结构，包括布隆过滤器、计数器、和TopK数据结构等。其中，布隆过滤器可以用于Redis缓存预热，通过将预热数据添加到布隆过滤器中，可以快速判断一个键是否存在于缓存中。（</span><a href="https://oss.redislabs.com/redisbloom/" target="_blank" data-lake-id="ucf679f16" id="ucf679f16"><span data-lake-id="u6361740a" id="u6361740a">https://oss.redislabs.com/redisbloom/</span></a><span data-lake-id="u98e71644" id="u98e71644">）</span></p>
  <p data-lake-id="u73d9f22a" id="u73d9f22a"><span data-lake-id="uff15c2a3" id="uff15c2a3">​</span><br></p>
  <p data-lake-id="uf95ca018" id="uf95ca018"><span data-lake-id="u2e478f38" id="u2e478f38">Redis </span><span data-lake-id="ucca06c9c" id="ucca06c9c" style="color: rgb(22 31 49/var(--tw-text-opacity))">Bulk loading：这是一个官方出的，基于Redis协议批量写入数据的工具</span><span data-lake-id="u2dfbb713" id="u2dfbb713">（</span><a href="https://redis.io/docs/manual/patterns/bulk-loading/" target="_blank" data-lake-id="ufe0d2d48" id="ufe0d2d48"><span data-lake-id="u239b31b9" id="u239b31b9">https://redis.io/docs/manual/patterns/bulk-loading/</span></a><span data-lake-id="u09c84c6a" id="u09c84c6a">）</span></p>
  <p data-lake-id="u57f1e9d8" id="u57f1e9d8"><span data-lake-id="u31b45003" id="u31b45003">​</span><br></p>
  <p data-lake-id="u95a3dc4e" id="u95a3dc4e"><span data-lake-id="u9b77be80" id="u9b77be80">Redis Desktop Manager：Redis Desktop Manager是一个图形化的Redis客户端，可以用于管理Redis数据库和进行缓存预热。通过Redis Desktop Manager，可以轻松地将预热数据批量导入到Redis缓存中。</span></p>
  <p data-lake-id="uc349ce5e" id="uc349ce5e"><br></p>
 </body>
</html>